const jwt = require('../util/jwt')
const {jwtSecret} = require('../config/config.default');
const {User} = require('../model')

module.exports = async (req, res, next)=>{
    /**
     * 从请求头获取 token 数据
     * 验证 token 是否有效
     * 无效 --> 401 状态码
     * 有效 --> 将用户信息读取出来挂载到 req 上
     * 继续往后执行
     */
    let token
    req.headers.authorization && (token = req.headers.authorization.split('Bearer ')[1])
    if(!Boolean(token)){
        res.status(401).end('请先验证身份')
        return 
    }
    try{
        const decodedToken = await jwt.verify(token, jwtSecret)
        const user = await User.findById(decodedToken.user_id)
        req.user = user
        next()
    } catch(e){
        res.status(401).json('身份验证失败')
    }
}